<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;
use App\Post;


class ArticleController extends Controller
{
    /**
     * 显示博客列表.
     *
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request)
    {
        //读取文章内容
        $posts = Post::orderBy('id','desc')
            ->where(function($query) use ($request){
                //检测当前的请求中是否包含keyword参数
                $keyword = $request->input('keyword', '');
                if(!empty($keyword)) {
                    $query->where('title','like','%'.$keyword.'%');
                }
            })
            ->paginate(10);

        return view('admin.article.index', ['posts'=>$posts, 'request'=>$request]);
    }

    /**
     * 添加博客文章
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {   
        //获取分类列表
        $cates=CatesController::getCates();
        //获取标签列表
        $tags=TagController::getTags();
        return view('admin.article.add',[
                    'cates' => $cates,
                    'tags'=>$tags
                    ]);
    }

    /**
     * 处理用户新发表的文章的提交.并将数据插入到数据库中
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //表单验证
         $this->validate($request, [
            'title' => 'required|unique:posts'
            ], [
            'title.required' => '标题名不能为空',
            'title.unique' => '标题已经存在'
            ]);
         //创建模型
         $post=new Post;
          // $post->fill($request->except([]));
         $post->title=$request->input('title');
         $post->content=$request->input('content');
         $post->cate_id=$request->input('cate_id');
         $post->user_id=1;//潜规则   当前用户登陆之后需要讲用户的这个uid写入到session中

         //检测是否有文件上传
       if($request->hasFile('img')) {
            //拼接文件夹路径
            $destinationPath = './Upload/img/'.date('Ymd').'/'; //规则 /Upload/20121010/12381902381.jpg
            //拼接文件路径
            $fileName = time().rand(100000,999999);
            //获取上传文件的后缀
            $suffix = $request->file('img')->getClientOriginalExtension();
            //文件的完整的名称
            $fullName = $fileName.'.'.$suffix;
            //保存文件
            $request->file('img')->move($destinationPath, $fullName);
            //拼接文件上传之后的路径  
            $post->img = trim($destinationPath.$fullName,'.');
        }
        if($post->save()) {
            //将tag数据存入到中间表 post_tag中
            if($post->tag()->sync($request->tag_id)) {
                return redirect('/admin/article')->with('info','文章添加成功');
            }
        }else{
            return back()->with('info','文章添加失败');
        }

    }

    /**
     * 显示文章详情.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //读取文章的内容
        $article = Post::findOrFail($id);
        //显示文章的内容
        return view('home.detail', ['article'=>$article]);    }

    /**
     * 编辑文章表单.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //读取当前id文章的内容
        $article = Post::findOrFail($id);
        $cates = CatesController::getCates();
        $tags = TagController::getTags();
        //获取所有的文章标签
        $allTags = $article->tag->toArray();
        $ids = [];
        foreach ($allTags as $key => $value) {
            $ids[] = $value['id'];
        }

        //解析模板 
        return view('admin.article.edit', ['article'=>$article,'cates'=>$cates,'tags'=>$tags,'ids'=>$ids]);
    }

    /**
     * 处理更新文章的请求.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //创建模型
        $post = Post::findOrFail($id);
        $post->title = $request->input('title');
        $post->content = $request->input('content');
        $post->cate_id = $request->input('cate_id');
        //检测是否有文件上传
        if($request->hasFile('img')) {
            //拼接文件夹路径
            $destinationPath = './Upload/img/'.date('Ymd').'/'; //规则 /Upload/20121010/12381902381.jpg
            //拼接文件路径
            $fileName = time().rand(100000,999999);
            //获取上传文件的后缀
            $suffix = $request->file('img')->getClientOriginalExtension();
            //文件的完整的名称
            $fullName = $fileName.'.'.$suffix;
            //保存文件
            $request->file('img')->move($destinationPath, $fullName);
            //拼接文件上传之后的路径  
            $post->img = trim($destinationPath.$fullName,'.');
        }

        if($post->save()) {
            //将tag数据存入到中间表 post_tag中
            if($post->tag()->sync($request->tag_id)) {
                return redirect('/admin/article')->with('info','文章更新成功');
            }
        }else{
            return back()->with('info','文章更新失败');
        }
    }

    /**
     * 删除文章.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //获取模型
        $post = Post::findOrFail($id);
        //删除图片
        @unlink('.'.$post->img);
        //删除
        if($post->delete()) {
            return back()->with('info','文章删除成功');
        }else{
            return back()->with('info','文章删除失败');
        }
    }


    /**
     * 获取文章的列表
     * 
     */
    public function lists()
    {
        //读取文章的列表
        $articles = Post::orderBy('id','desc')->paginate(10);
        //
        return view('home.lists', ['articles'=>$articles]);
    }
}
